home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / UNIX / TREEPAR / NETWORK.H < prev    next >
Text File  |  1992-11-23  |  5KB  |  127 lines

  1. /* network.h - definition of the network (typically a tree) structure.
  2.  *
  3.  * 28.Jul.87  jimmc  Initial definition
  4.  *  1.Aug.87  jimmc  Add text stuff in Nbox
  5.  *  2.Aug.87  jimmc  Add path stuff
  6.  * 12.Aug.87  jimmc  Add boxname and netname to conn
  7.  * 14.Aug.87  jimmc  Add stuff to rows, nets; add tracks
  8.  * 19.Aug.87  jimmc  Add label
  9.  *  3.Nov.87  jimmc  Add rowdir, modify Npoint
  10.  * 27.Jan.88  jimmc  Add FEEDTHROUGH flag
  11.  */
  12.  
  13. /* parflag bits */
  14. #define ROWSET  (1<<0)    /* this bit set if the row has been set */
  15. #define ORDERSET (1<<1)    /* this bit set if the order in row has been set */
  16. #define BOXROW  (1<<2)    /* for rows, this bit set if a row of boxes */
  17. #define SPANSET (1<<3)    /* for tracks, indicates a span has been set */
  18. #define POSITIONSET (1<<4) /* for boxes, when position within row is set */
  19. #define FEEDTHROUGH (1<<5) /* for boxes, indicates a feedthrough net */
  20.  
  21. typedef struct _Npoint {    /* a point or vector value */
  22.     int cc[2];    /* x and y */
  23. #define X cc[0]        /* normal coords */
  24. #define Y cc[1]
  25. } Npoint;
  26.  
  27. typedef struct _Ngroup { /* for dynamically allocated arrays of thingies */
  28.     int count;    /* number of entries used */
  29.     int alloc;    /* number of entries allocated */
  30.     union {
  31.         struct _Nnet  **net;
  32.         struct _Nbox  **box;
  33.         struct _Nconn **conn;
  34.         struct _Nrow  **row;
  35.         struct _Ntrack **track;
  36.         struct _Ngroup **path;
  37.         struct _Npoint *pt;    /* this one is a bit different */
  38.         int *n;
  39.         char * *x;    /* untyped version of data */
  40.     } d;
  41. } Ngroup;
  42.  
  43. typedef struct _Nconn {    /* one connector (terminal) */
  44.     char *name;        /* name of the connector */
  45.     char *boxname;        /* name of the box (used before linking) */
  46.     struct _Nbox *box;    /* pointer to box owning this connector */
  47.     Npoint pos;        /* position of this connector wrt box */
  48.     Npoint apos;        /* absolute position of this connector */
  49.     int side;        /* which side of the box (N,S,E,W)*/
  50. #define N 0
  51. #define S 1
  52. #define E 2
  53. #define W 3
  54.     char *netname;        /* name of net (used before linking) */
  55.     struct _Nnet *net;    /* the net attached to this connector */
  56. } Nconn;
  57.  
  58. typedef struct _Nbox {    /* a box */
  59.     char *name;    /* name of this box */
  60.     Npoint size;    /* size of the box */
  61.     Npoint origin;    /* origin (lower left corner) */
  62.     char *text;    /* text within the box */
  63.     Npoint text_origin;    /* origin of text relative to origin of box */
  64.     int text_opos;    /* where the text origin is wrt the text (see plot.h) */
  65.     int rownum;    /* number of the row this box is in */
  66.     struct _Nrow *row;    /* row containing this box */
  67.     int rowpos;    /* relative position of this block in that row */
  68.     Ngroup connlist;    /* associated connectors */
  69.     int parflags;        /* flags used during place/route */
  70. } Nbox;
  71.  
  72. typedef struct _Nnet {    /* one net (wire, polyline) */
  73.     char *name;    /* name of the net */
  74.     Ngroup connlist;    /* associated connectors */
  75.     struct _Ngroup pathlist;    /* a set of paths */
  76.     int rownum;    /* number of the row this net is in */
  77.     struct _Nrow *row;    /* row containing this net */
  78.     int rowpos;    /* position within that row */
  79.     int minpos,maxpos;    /* span of the net within the row */
  80.     struct _Ntrack *track;
  81.     int parflags;        /* flags used during place/route */
  82.     int angle;
  83. } Nnet;
  84.  
  85. typedef struct _Ntrack {    /* one track within a channel */
  86.     int parflags;
  87.     Ngroup netlist;        /* list of nets in this track (from which
  88.                  * we can determine the used ranges) */
  89.     int n;            /* track index number in channel */
  90.     int pos;        /* track position */
  91. } Ntrack;
  92.  
  93. typedef struct _Nrow {    /* one placement row */
  94.     int rownum;    /* the number for this row */
  95.     int size;    /* size of this row (typically the small dimension) */
  96.     int length;    /* length (typically the larger dimension) */
  97.     int pos;    /* position of the row */
  98.     Ngroup boxlist;    /* boxes which are in this row */
  99.     Ngroup netlist;    /* nets which are in this row */
  100.     int rowposmin, rowposmax;    /* for relative position of boxes */
  101.     Ngroup tracklist;    /* set of tracks within a channel */
  102.     int parflags;
  103. } Nrow;
  104.  
  105. typedef struct _Nlabel {
  106.     char *s;        /* the label string */
  107.     Npoint tsize;        /* size of the label in chars */
  108.     Npoint origin;        /* lower left corner of the label */
  109. } Nlabel;
  110.  
  111. typedef struct _Nbase {    /* the handle for everything */
  112.     Ngroup netlist;
  113.     Ngroup boxlist;
  114.     Ngroup connlist;
  115.     Ngroup rowlist;
  116.     int maxrowlength;    /* length of the longest row */
  117. /* global parms */
  118.     Npoint textsize;
  119.     int interrowspace;    /* default space between rows */
  120.     int rowposspace;    /* mon space between boxes in a row */
  121.     int trackspace;        /* space between routing tracks */
  122.     Nlabel label;        /* label for the whole thing */
  123.     int rowdir;        /* 'V'ertical or 'H'orizontal */
  124. } Nbase;
  125.  
  126. /* end */
  127.